// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1

AndroidItem {
    id: _root
    width: 720 * viewScale
    height: 1280 * viewScale
    color: "#000000"

    viewScale: 0.5
    isLock: false

    isPortrait: true     //縦向き

    property alias bootAnimeLoaded: _bootAnimation.loaded           //ブートアニメがロードできてるか
    property alias numberOfHomescreen: _home.numberOfHomescreen     //ホームスクリーンの数

    property alias launcherPath: _launcher.launcherPath             //ランチャー
    property alias lockScreenPath: _lockScreen.lockScreenPath       //ロックスクリーン
    property alias naviKeyBackPath: _naviKey.naviKeyBackPath        //ナビキー（戻る）
    property alias naviKeyBackImePath: _naviKey.naviKeyBackImePath  //ナビキー（戻る IME）
    property alias naviKeyExpandPath: _naviKey.naviKeyExpandPath    //ナビキー（ノティファイ開く）
    property alias naviKeyHomePath: _naviKey.naviKeyHomePath        //ナビキー（ホーム）
    property alias naviKeyMenuPath: _naviKey.naviKeyMenuPath        //ナビキー（メニュー）
    property alias naviKeyRecentPath: _naviKey.naviKeyRecentPath    //ナビキー（履歴）
    property alias notificationItemNormalPath: _notification.notificationItemNormalPath     //通知アイテム
    property alias notificationItemPressedPath: _notification.notificationItemPressedPath   //通知アイテム
    property alias notificationTrackingBgPath: _notification.notificationTrackingBgPath     //通知背景
    property alias screenshotPath: _screenShot.screenshotPath       //スクリーンショット
    property alias wallpaperPath: _home.wallpaperPath               //壁紙
    property alias recentFramePath: _recent.recentFramePath         //履歴
    property alias statusBarBackgroundPath: _notificationBar.statusBarBackgroundPath        //ステータスバー背景
    property alias imeSimejiPath: _applicationArea.imeSimejiPath                            //IME Simeji縦
    property alias naviBarBackGroundPath: _naviKey.naviBarBackGroundPath                    //ナビバー（背景）
    property alias phoneDialBackgroundPath: _applicationArea.phoneDialBackgroundPath        //電話のダイヤルの背景
    property alias statusBarWifiPath: _notificationBar.statusBarWifiPath                    //Wifi
    property alias statusBarWifiFullyPath: _notificationBar.statusBarWifiFullyPath          //Wifi full
    property alias statusBarWifiInOutPath: _notificationBar.statusBarWifiInOutPath          //Wifi in/out
    property alias statusBarBatteryPath: _notificationBar.statusBarBatteryPath              //バッテリー
    property alias statusBarBatteryChargePath: _notificationBar.statusBarBatteryChargePath  //バッテリー充電


    property alias jcbeamThemeList: _applicationArea.jcbeamThemeList            //jcbeamのテーマリスト

    //コントロール系
    property alias wifiSignal: _notificationBar.wifiSignal                  //wifiの電界強度
    property alias wifiSignalFully: _notificationBar.wifiSignalFully        //wifiの強度 fully
    property alias isWifiSignalFully: _notificationBar.isWifiSignalFully    //wifi fullか
    property alias wifiDirection: _notificationBar.wifiInOut                //wifiの通信方向
    property alias batteryCharge: _notificationBar.batteryCharge            //バッテリーの充電状態
    property alias isBatteryCharge: _notificationBar.isBatteryCharge        //バッテリー充電中？


    //ロック状態を制御する
    function screenLock(islock){
        if(islock === true){
            notificationState(false);
            _root.isLock = true;
            _lockScreen.visible = true;
        }else{
            _root.isLock = false;
            _lockScreen.visible = false;
        }
    }
    //ランチャーの状態を制御する
    function launcherState(isopen){
        if(isopen === true){
            _launcher.isViewing = true;
        }else{
            _launcher.isViewing = false;
        }
    }
    //アプリの表示状態を制御する
    function startApplication(packageName){
        if(packageName.length < 1){
            _applicationArea.visible = false;
        }else{
            _applicationArea.appPackageName = packageName;
            _applicationArea.visible = true;
        }
    }

    //通知の状態を制御する
    function notificationState(isopen){
        if(isopen === true){
            _notification.moveTo(_notification.height);
        }else{
            _notification.moveTo(0);
        }
    }
    function getNotificationState(){
        if(_notification.opacity < 1){
            return false;
        }else{
            return true;
        }
    }

    //履歴の状態を制御する
    function recentState(isopen){
        if(isopen === true){
            _recent.visible = true;
        }else{
            _recent.visible = false;
        }
    }
    function getRecentState(){
        return _recent.visible;
    }

    //スクリーンショット
    function takeScreenShot(){
        _screenShot.takeScreenShot();
    }

    //ブートアニメ
    function boot(paths){
        if(paths === undefined){
            _bootAnimation.stop();
        }else{
            if(_bootAnimation.equalsPaths(paths) === true){
                //スタートかける
                _bootAnimation.start();
            }else{
                //設定するだけ
                _bootAnimation.visible = true;
                _bootAnimation.paths = paths;
            }
        }
    }

    //ホーム全体
    Item{
        id: _homeArea
        anchors.top: _notificationBar.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: _naviKey.top

        //ホームのボタンとか
        Home{
            id: _home
            anchors.fill: parent
            viewScale: _root.viewScale
            isLock: _root.isLock
            isPortrait: _root.isPortrait

            onClicked: {
                //ランチャーを開く
                launcherState(true);
            }

            onStartApplication: {
                //アプリ起動
                _root.startApplication(packageName);
            }
        }

        //ランチャー
        Launcher{
            id: _launcher
            anchors.fill: parent
            visible: false
            viewScale: _root.viewScale
            isLock: _root.isLock
            isPortrait: _root.isPortrait
        }

        //アプリの表示エリア
        ApplicationArea{
            id: _applicationArea
            anchors.fill: parent
            visible: false
            viewScale: _root.viewScale
            isLock: _root.isLock
            isPortrait: _root.isPortrait
//            isImeOn: true

            imePackageName: "com.adamrocker.android.input.simeji"
        }

        //ロック画面
        LockScreen{
            id: _lockScreen
            anchors.fill: parent
            visible: false
            viewScale: _root.viewScale
            isLock: _root.isLock
            isPortrait: _root.isPortrait
            onClicked: {
            }
            onUnlocked: {
                screenLock(false);
            }
        }

    }

    //ナビキー
    Navikey{
        id: _naviKey
        anchors.bottom: parent.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        viewScale: _root.viewScale
        isLock: _root.isLock
        isPortrait: _root.isPortrait
        viewIme: _applicationArea.visible & _applicationArea.viewIme
        viewNotify: getNotificationState()

        onClicked: {
            switch(key){
            case 1:
                // back
                if(_applicationArea.viewIme){
                    _applicationArea.viewIme = false;
                }else{
                    launcherState(false);
                    notificationState(false);
                    recentState(false);
                    startApplication("");
                }
                break;
            case 2:
                // menu
                break;
            case 3:
                // home
                if(_launcher.isViewing === true
                        || _applicationArea.visible === true){
                }else{
                    _home.move(0);
                }
                launcherState(false);
                notificationState(false);
                recentState(false);
                startApplication("");
                break;
            case 4:
                // expand
                if(getNotificationState() === true){
                    recentState(false);
                }
                notificationState(!getNotificationState());
                break;
            case 5:
                // recent
                recentState(!getRecentState());
                break;
            default:
                break;
            }
            var i=0;
            i = i;
        }
    }

    //通知
    NotificationBar{
        id: _notificationBar
        anchors.top: parent.top
        anchors.left: parent.left
        anchors.right: parent.right
        viewScale: _root.viewScale
        isLock: _root.isLock
        isPortrait: _root.isPortrait

        property real prev_y: 0
        property bool isOpe: false
        Component.onCompleted: {
        }

        onPressed: {
            prev_y = mouse.y;
            if(_notification.viewHieght < 0.1){
                _notification.viewHieght += (92 + 36) * viewScale;
                isOpe = true;
            }
        }
        onMouseMove: {
            if(isOpe === true){
                if(mouse.y > 92 * viewScale){
                    if((_notification.viewHieght + mouse.y - prev_y) < (_notification.height)){
                        _notification.viewHieght += mouse.y - prev_y;
                    }else{
                        _notification.viewHieght = _notification.height;
                    }
                }
                prev_y = mouse.y;
            }
        }
        onReleased: {
            if(isOpe === true){
                if(mouse.y < (_root.height / 2)){
                    // 戻す
                    notificationState(false);
                }else{
                    // 下ろす
                    notificationState(true);
                }
            }
            isOpe = false;
        }
    }
    //通知領域
    Notification{
        id: _notification
        x: 0
        y: 0
        width: parent.width
        height: parent.height - _naviKey.height
        viewScale: _root.viewScale
        isLock: _root.isLock
        isPortrait: _root.isPortrait
        handlePressed: _notificationBar.isOpe
    }


    //履歴
    Recent{
        id: _recent
        anchors.top: parent.top
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: _naviKey.top
        viewScale: _root.viewScale
        isLock: _root.isLock
        isPortrait: _root.isPortrait
    }

    //スクリーンショット
    ScreenShot{
        id: _screenShot
        anchors.fill: parent
        viewScale: _root.viewScale
        isLock: _root.isLock
        isPortrait: _root.isPortrait

        onFinished: {

        }
    }

    //ブートアニメ
    BootAnimation{
        id: _bootAnimation
        anchors.fill: parent
        isPortrait: _root.isPortrait
        onRunningChanged: {
            if(running === true){
                _root.screenLock(true);
            }
        }
        onLoadedChanged: {
            //ロード完了したら実行
            _bootAnimation.start();
        }
    }

    //状態管理
    states: [
        State {
            name: "Landscape"
            when: !isPortrait
            //ルートのサイズとか
            PropertyChanges {
                target: _root
                rotation: 90
                width: 1280 * viewScale
                height: 720 * viewScale
                x: -280 * viewScale
                y: 280 * viewScale
            }
            //ナビキーの位置変更
            AnchorChanges{
                target: _naviKey
                anchors.top: _root.top
                anchors.bottom: _root.bottom
                anchors.right: _root.right
                anchors.left: undefined
            }
            PropertyChanges {
                target: _naviKey
                width: 84 * viewScale

            }
            //ホームの位置変更
            AnchorChanges{
                target: _homeArea
                anchors.left: _root.left
                anchors.right: _naviKey.left
                anchors.bottom: _root.bottom
            }
            //通知バーの位置変更
            AnchorChanges{
                target: _notificationBar
                anchors.top: _root.top
                anchors.left: _root.left
                anchors.right: _naviKey.left
            }
            //通知のサイズ
            PropertyChanges {
                target: _notification
                width: parent.width - _naviKey.width
                height: parent.height
            }
            //履歴
            AnchorChanges{
                target: _recent
                anchors.right: _naviKey.left
                anchors.bottom: _root.bottom
            }
        }
    ]


}
